package com.turing.post.organization.util;

import java.math.BigInteger;
import java.util.List;
import java.util.Map;

import javax.ejb.Local;
import javax.ejb.Remote;

import com.turing.post.util.PCPSApplicationException;
import com.turing.post.util.PCPSWebInput;

/**
 * 销售商分支机构
 * 
 * @author zxp
 * @Dec 18, 2012
 */
@Remote
@Local
public interface SaleBranchDao {
	/**
	 * 根据销售商分支机构主键编号查询销售商分支机构
	 * 
	 * @return saleBranchNo 销售分支机构号
	 */
	public SaleBranch getSaleBranchBySaleBranchNo(String saleBranchNo);

	/**
	 * 获取销售机构自动生成顺序号
	 * 
	 * @param saleBranchNo
	 * @param regionNo
	 * @return
	 */
	public String getAutoSaleBranchSeqNo(String saleBranchNo, String regionNo);

	/**
	 * 根据销售商分支机构名称查询销售商机构
	 * 
	 * @param saleBranchName
	 *            销售商机构名称
	 */
	public SaleBranch getSaleBranchBySaleBranchName(String saleBranchName);

	/**
	 * 分页查询销售商分支机构
	 * 
	 * @param page
	 *            页码
	 * @param branchNo
	 *            所属机构号
	 * @return List 销售分支机构列表
	 */
	public List<SaleBranch> getSaleBranchList(PCPSWebInput webInput,
			String saleBranchNo, String saleBranchName, String regionNo,
			Integer page);

	/**
	 * 查询菜单表记录条数
	 * 
	 * @param branchNo
	 *            所属机构
	 * @return BigInteger 记录数
	 */
	public BigInteger getSaleBranchTotal(PCPSWebInput webInput,
			String saleBranchNo, String saleBranchName, String regionNo);

	/**
	 * 新增销售商分支机构
	 * 
	 * @param saleBranch
	 *            销售商分支机构
	 * @throws PCPSApplicationException
	 */
	public void insertSaleBranch(SaleBranch saleBranch)
			throws PCPSApplicationException;

	/**
	 * 修改销售商分支机构
	 * 
	 * @param saleBranch
	 *            销售商分支机构
	 */
	public void updateSaleBranch(SaleBranch saleBranch)
			throws PCPSApplicationException;

	// /**
	// * @根据登录用户机构号查询销售机构下拉树
	// * @param operBranchNo
	// * @return
	// */
	// public List<OrganTreeList> getSaleBranchListBySaleBranchNo(String
	// branchNo,
	// Integer minLen);

	// /**
	// * @树形分层目录判断查询
	// * @param operBranchNo
	// * @return
	// */
	// public Integer getSaleBranchMinLenSalebBanchNo(String branchNo);

	/**
	 * 查询锁定销售商分支机构
	 * 
	 * @param saleBranchNo
	 * @return SaleBranch 销售商分支机构
	 */
	public SaleBranch getSaleBranchForUpdate(String saleBranchNo);

	/**
	 * 录入销售单时判断该销售商是否过期
	 * 
	 * @param issueCompanyNo
	 *            发卡商分支机构
	 * @return 发卡商分支机构列表
	 */
	// public List<SaleBranch> getSaleBranchListBySaleCompanyNoIsNotNull(
	// String issueCompanyNo);
	/**
	 * 查询某发卡商下的销售机构列表
	 * 
	 * @param issueCompanyNo
	 * @return
	 */
	public List<SaleBranch> getAllSaleBranchByIssueCompanyNo(
			String issueCompanyNo);

	// 现金库超限查询 机构树选择 siall 机构号 机构名称 现金库余额
	// 现金库查询 机构树选择 siall 金额范围 机构号 机构名称 现金库余额
	// 机构树选择 siall 金额范围 机构号 机构名称 预存款余额
	/**
	 * 机构金额分类查询
	 * 
	 * @param webInput
	 * @param searchType
	 *            OverCash 现金库超限查询 Cash 现金库查询 Credit预存款查询
	 * @param saleBranchNo
	 *            机构号
	 * @param startMoney
	 *            起始金额
	 * @param endMoney
	 *            终止金额
	 * @return
	 */
	public List<SaleBranch> getSerchSaleBranchCashListByCondition(
			PCPSWebInput webInput, String searchType, String saleBranchNo,
			BigInteger startMoney, BigInteger endMoney, Integer page);

	public BigInteger getSerchSaleBranchCashTotalByCondition(
			PCPSWebInput webInput, String searchType, String saleBranchNo,
			BigInteger startMoney, BigInteger endMoney);

	/**
	 * 获取销售商分支机构报表
	 * 
	 * @param webInput
	 * @return
	 */
	public List<Object[]> getSaleBranchReport(PCPSWebInput webInput);

	/**
	 * 创建销售单是销售员下拉机构
	 * 
	 * @param webInput
	 * @return
	 */
	public List<SaleBranch> getSalesSaleBranchList(PCPSWebInput webInput);

	/**
	 * 根据发卡商号,获取按照发卡机构为key,销售机构为value的map表
	 * 
	 * @param issueCompanyNo
	 * @return
	 */
	public Map<String, String> getSaleBrchMapByIssueCompanyNo(
			String issueCompanyNo);

	/**
	 * 根据发卡机构号获取下属所有销售机构信息
	 * 
	 * @param issueBrchNo
	 * @return
	 */
	public List<SaleBranch> getSaleBrchByIssueBrchNo(String issueBrchNo);

	public void deleteSaleBranch(String branchNo)
			throws PCPSApplicationException;

	/**
	 * 设置指定机构日终标志
	 * 
	 * @param issueCompanyNo
	 *            发卡商
	 * @param branchNo
	 *            (可选) 销售机构号
	 * @param status
	 *            日终标志
	 */
	public void setDayOffStatus(String issueCompanyNo, String branchNo,
			String status);
}
